package com.edar.dao;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;

import org.hibernate.SessionFactory;

import com.edar.dao.util.QueryCondition;

/**    
 * 定义通用的CRUD操作
 * 来自:http://www.hibernate.org/328.html 
 * @author sys53
 */
public interface GenericDao<T, ID extends Serializable> {
	/**
	 * 通过主键标识查找某个对象。      
	 */
	public T findById(ID id);

	/**
	 * 通过主键标识查找某个对象，可以锁定表中对应的记录。      
	 */
	T findById(ID id, boolean lock);

	/**
	 * 得到所有的对象。      
	 */
	List<T> findAll();

	/**
	 * 通过给定的一个对象，查找与其匹配的对象。      
	 * @return
	 */
	List<T> findByExample(T exampleInstance,int offset,int maxResults);

	/**
	 * 持久化对象。      
	 */
	T makePersistent(T entity);

	/**
	 * 删除对象。      
	 */
	void makeTransient(T entity);
	/**
	 * 批量更新
	 * @param qc
	 * @return
	 */
	int bulkUpdate(QueryCondition qc);
	/**
	 * 查询语句
	 * @param qc
	 * @return
	 */
	public <X> List<X> find(QueryCondition qc);
	/**
	 * 查询语句，迭代器
	 * @param qc
	 * @return
	 */
	public <X> Iterator<X> iterator(QueryCondition qc);
	/**
	 * hibernate 延时加载内容
	 * @param proxy
	 */
	public void initialize(Object proxy);
	/**
	 * 清除一级缓存中的缓存对象
	 */
	public void clear();
	
	public void setSessionFactory(SessionFactory sessionFactory);
	
}   


